#!/bin/bash

# PostgreSQL数据库备份脚本
# 功能：导出数据库的所有schema、table、数据为SQL格式
# 作者：系统管理员

# 数据库连接信息
db_host="localhost"
db_port="5432"
db_name="20250808order"
db_user="postgres"
db_password="123456"

# 备份存储目录
script_dir="$(cd "$(dirname "$0")" && pwd)"
backup_dir="$script_dir/data_backup"

# 保留备份的天数
retention_days=7

# 创建备份目录
mkdir -p "$backup_dir"

# 备份文件名
timestamp=$(date +'%Y%m%d_%H%M%S')
backup_file="$backup_dir/backup_${db_name}_${timestamp}.sql"
backup_log="$backup_dir/backup_${db_name}_${timestamp}.log"

# 设置环境变量
export PGPASSWORD="$db_password"

echo "开始备份数据库: $db_name"
echo "备份文件: $backup_file"
echo "备份时间: $(date)"

# 执行完整备份（SQL格式，不包含数据库创建信息）
./pg_dump \
    -h "$db_host" \
    -p "$db_port" \
    -U "$db_user" \
    -d "$db_name" \
    -F p \
    -b \
    -v \
    --no-owner \
    --no-privileges \
    --inserts \
    --column-inserts \
    --disable-triggers \
    -f "$backup_file" \
    > "$backup_log" 2>&1

# 检查备份结果
if [ -f "$backup_file" ]; then
    echo "数据库备份成功完成！"
    echo "备份文件: $backup_file"
    echo "备份日志文件: $backup_log"
    
    # 显示备份文件大小
    echo "备份文件大小:"
    ls -lh "$backup_file"
    
    # 生成导入命令
    import_cmd="psql -h $db_host -p $db_port -U $db_user -d 目标数据库名 -f $backup_file"
    
    echo ""
    echo "=========================================="
    echo "导入命令："
    echo "=========================================="
    echo "$import_cmd"
    echo ""
    echo "使用说明："
    echo "1. 将 '目标数据库名' 替换为实际的目标数据库名称"
    echo "2. 确保目标数据库已创建"
    echo "3. 如果目标数据库已存在数据，请谨慎使用"
    echo ""
    echo "示例："
    echo "psql -h $db_host -p $db_port -U $db_user -d new_database -f $backup_file"
    echo ""
    
    # 将导入命令保存到文件
    echo "$import_cmd" > "$backup_dir/import_command_${timestamp}.txt"
    echo "psql -h $db_host -p $db_port -U $db_user -d new_database -f $backup_file" >> "$backup_dir/import_command_${timestamp}.txt"
    echo "导入命令已保存到: $backup_dir/import_command_${timestamp}.txt"
    
    # 删除旧的备份文件
    find "$backup_dir" -name "backup_*.sql" -type f -mtime +$retention_days -exec rm -f {} \;
    find "$backup_dir" -name "import_command_*.txt" -type f -mtime +$retention_days -exec rm -f {} \;
    echo "已清理 $retention_days 天前的备份文件"
else
    echo "数据库备份失败, 详见日志: $backup_log"
    exit 1
fi

echo "备份完成时间: $(date)"
echo "=========================================="